<?php

global $patterns;
$patterns['username'] = '/^[0-9a-zA-Z]{3,13}$/';
$patterns['nome'] = '/^[òèùàìéa-zA-Z]{3,13}$/';
$patterns['cognome'] = '/^[òèùàìéa-zA-Z ]{3,13}$/';
$patterns['email'] = '/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/';
$patterns['via'] = '/^[a-zA-Z]{3,12}$/';
$patterns['cap'] = '/^[0-9]{5}$/';
$patterns['civico'] = '/^[a-z0-9\ ]{0,5}$/';
$patterns['citta'] = '/^[a-zA-Z]{2,15}$/';
$patterns['codicefiscale'] = '/^[A-Za-z]{6}[0-9]{2}[A-Za-z][0-9]{2}[A-Za-z][0-9]{3}[A-Za-z]$/';
$patterns['titolo'] = '/^[a-zA-Z0-9\,\.\:\ \?òèùàìé\']{1,200}$/';
$patterns['numero_telefono'] = '/^[0-9\ \/\\\/\-]{5,11}$/';

/**
 * Description of UCheck
 *
 * @author andrea ialenti
 */
class UChecks_cuspo {

  /**
   *
   * Controlla il campo email
   * @param string $email l'email da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_email($email, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($email == "" || !isset($email))) {
      $error['field'] = "email";
      $error['code'] = 1;
      $error['description'] = "Email non inserita";
      return $error;
    }
    if (!preg_match($patterns['email'], $email)) {
      $error['field'] = "email";
      $error['code'] = 2;
      $error['description'] = "Indirizzo email non valido";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla il nome
   * @param string nome il nome da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_nome($nome, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($nome == "" || !isset($nome))) {
      $error['field'] = "nome";
      $error['code'] = 1;
      $error['description'] = "Nome non inserito";
      return $error;
    }
    if (!preg_match($patterns['nome'], $nome)) {
      $error['field'] = "nome";
      $error['code'] = 2;
      $error['description'] = "Il nome contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  public function check_titolo($titolo, $required = true, $max_chars = 0) {
    $error = array();
    global $patterns;
    if ($required == true && ($titolo == "" || !isset($titolo))) {
      $error['field'] = "titolo";
      $error['code'] = 1;
      $error['description'] = "Titolo non inserito";
      return $error;
    }
    if (!preg_match($patterns['titolo'], $titolo)) {
      $error['field'] = "titolo";
      $error['code'] = 2;
      $error['description'] = "Caratteri non ammessi nel titolo";
      return $error;
    }
    if ($max_chars > 0 ) {
      $str_length = strlen($descrizione);
      if ($max_chars < $str_length) {
        $error['field'] = "titolo";
        $error['code'] = 3;
        $error['description'] = "Titolo troppo lungo";
        return $error;
      }
      return false;
    }
  }

  public function check_descrizione($descrizione, $required = false, $max_chars = 0) {
    $error = array();
    global $patterns;
    if ($required == true && ($descrizione == "" || !isset($descrizione))) {
      $error['field'] = "descrizione";
      $error['code'] = 1;
      $error['description'] = "Descrizione non inserita";
      return $error;
    }
    if ($max_chars > 0 ) {
      $str_length = strlen($descrizione);
      if ($max_chars < $str_length) {
        $error['field'] = "descrizione";
        $error['code'] = 2;
        $error['description'] = "Descrizione troppo lunga";
        return $error;
      }
    }

    return false;
  }

  /**
   *
   * Controlla il cognome
   * @param string $cognome il cognome da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_cognome($cognome, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($cognome == "" || !isset($cognome))) {
      $error['field'] = "cognome";
      $error['code'] = 1;
      $error['description'] = "Cognome non inserito";
      return $error;
    }
    if (!preg_match($patterns['cognome'], $cognome)) {
      $error['field'] = "cognome";
      $error['code'] = 2;
      $error['description'] = "Il cognome contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla il CAP
   * @param string $cap il CAP da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_cap($cap, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($cap == "" || !isset($cap))) {
      $error['field'] = "cap";
      $error['code'] = 1;
      $error['description'] = "CAP non inserito";
      return $error;
    }
    if (!preg_match($patterns['cap'], $cap)) {
      $error['field'] = "cap";
      $error['code'] = 2;
      $error['description'] = "Il CAP contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla il numero di telefono
   * @param string $numero il numero da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_numero_telefono($cap, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($cap == "" || !isset($cap))) {
      $error['field'] = "numero";
      $error['code'] = 1;
      $error['description'] = "Devi inserire il numero telefonico ";
      return $error;
    }
    if (!preg_match($patterns['numero_telefonico'], $cap)) {
      $error['field'] = "cap";
      $error['code'] = 2;
      $error['description'] = "Il numero di telefono contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla l'username
   * @param string $username l'username da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_username($username, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($username == "" || !isset($username))) {
      $error['field'] = "username";
      $error['code'] = 1;
      $error['description'] = "Username non inserito";
      return $error;
    }
    if (!preg_match($patterns['username'], $username)) {
      $error['field'] = "username";
      $error['code'] = 2;
      $error['description'] = "Il username contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla la via
   * @param string $via la via da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_via($via, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($via == "" || !isset($via))) {
      $error['field'] = "via";
      $error['code'] = 1;
      $error['description'] = "Via non inserita";
      return $error;
    }
    if (!preg_match($patterns['via'], $via)) {
      $error['field'] = "via";
      $error['code'] = 2;
      $error['description'] = "La via contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla la citta
   * @param string $citta la citta da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_citta($citta, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($citta == "" || !isset($citta))) {
      $error['field'] = "citta";
      $error['code'] = 1;
      $error['description'] = "città non inserita";
      return $error;
    }
    if (!preg_match($patterns['citta'], $citta)) {
      $error['field'] = "citta";
      $error['code'] = 2;
      $error['description'] = "La città contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla il civico
   * @param string civico il civico da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_civico($civico, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($civico == "" || !isset($civico))) {
      $error['field'] = "civico";
      $error['code'] = 1;
      $error['description'] = "civico non inserito";
      return $error;
    }
    if (!preg_match($patterns['civico'], $civico)) {
      $error['field'] = "civico";
      $error['code'] = 2;
      $error['description'] = "Il civico contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla il codicefiscale
   * @param string codicefiscale il codicefiscale da controllare
   * @param bool $required default:true, porre a false se il campo non è ammesso
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_codicefiscale($codicefiscale, $required = true) {
    $error = array();
    global $patterns;
    if ($required == true && ($codicefiscale == "" || !isset($codicefiscale))) {
      $error['field'] = "codicefiscale";
      $error['code'] = 1;
      $error['description'] = "codice fiscale non inserito";
      return $error;
    }
    if (!preg_match($patterns['codicefiscale'], $codicefiscale)) {
      $error['field'] = "codicefiscale";
      $error['code'] = 2;
      $error['description'] = "Il codice fiscale contiene caratteri non ammessi";
      return $error;
    }
    return false;
  }

  /**
   *
   * Controlla se una select è stata selezionata
   * @param string $selval il valore della select
   * @param string $selname il nome della select
   * @param string $default il valore di default della select
   * @return mixed false se NON ci sono errori, un array associativo (campi: code, description) in caso di errore
   */
  public function check_select($selval, $selname, $default = "") {
    $error = array();
    if (($selval == $default || !isset($selval))) {
      $error['field'] = "$selname";
      $error['code'] = 1;
      $error['description'] = "Devi scegliere un campo per $selname";
      return $error;
    }
    return false;
  }

  public function simplyCheckIfError($errors) {
    $error = false;
    foreach ($errors as $value) {
      if ($value != false)
        $error = true;
    }
    return $error;
  }

}

?>
